6장. 클로드 코드에 바깥 세상 연결하기

출처: 『혼자 공부하는 바이브 코딩 with 클로드 코드』(조태호) | 예제 코드: github.com/taehojo/vibecoding

코드는 분위기만 — API, 엔드포인트, localStorage 같은 말은 몰라도 됩니다. 표의 '비유'와 '위험'만 봐도 충분해요.

지금까지는 클로드 코드 혼자 만드는 것만 했다.

이 장은 내 앱을 바깥 서비스와 잇는 법을 배운다.

바깥 서비스란 구글의 이미지 인식, 챗봇의 글쓰기 같은 남이 만들어 둔 똑똑한 기능이다.

그 기능을 빌려 와, 냉장고 사진을 찍으면 레시피를 골라 주는 앱을 끝까지 만든다.


0. 이 장의 새 단어 (0장에 없는 것만 3개)

0장 용어집에 있는 말(바이브 코딩·프롬프트·LLM·PRD·localhost 등)은 다 안다고 보고 간다.

이 장에서 처음 나오는 말은 딱 3개다. 먼저 풀어 둔다.


API(에이피아이)

한 문장 뜻 — 내 앱이 바깥 서비스에게 일을 부탁하고 결과를 받는 정해진 창구.

일상비유 — 식당의 웨이터. 손님은 주방에 직접 못 들어간다. 웨이터에게 "파스타요" 하면, 웨이터가 주방에 전하고 음식을 가져온다.

한 줄 예 —

# 내 앱이 바깥 AI에게 일을 부탁하는 한 줄
# (이미지를 보내면, AI가 재료 이름을 돌려준다)
result = api.ask(image="냉장고.jpg")

API 키(에이피아이 키)

한 문장 뜻 — 그 창구를 쓸 수 있게 해 주는 나만의 비밀번호. 누가 얼마나 썼는지를 이걸로 가린다.

일상비유 — 헬스장 회원 카드. 카드를 찍어야 문이 열리고, 그 카드로 들어간 기록이 내 앞으로 남는다. 남에게 빌려주면 남이 내 이름으로 쓴다.

한 줄 예 —

# 이 비밀번호가 있어야 창구가 열린다 (절대 공개 금지)
key = "AIzaSy...내_비밀_키"

멀티모달(multimodal)

한 문장 뜻 — 글뿐 아니라 그림·소리 같은 여러 형태의 입력을 함께 알아듣는 능력.

일상비유 — 눈도 있고 귀도 있는 사람. 글만 읽는 게 아니라, 사진을 보여 주면 "아, 이건 당근이네" 하고 알아본다.

한 줄 예 —

# 글이 아니라 '사진'을 입력으로 받는다
# → AI가 사진 속 재료를 글로 적어 준다
result = api.ask(image="냉장고.jpg")  # 사진 입력

(귀납 도입) 클로드 코드만으로는 냉장고 사진을 못 알아본다

5장까지 따라오면 이런 생각이 든다.

"클로드 코드가 코드도 짜 주는데, 냉장고 사진 보고 재료도 알아맞히겠지?"

그래서 시켜 본다.

# 클로드 코드에게 그냥 부탁만 한다
# "이 냉장고 사진 보고 재료 목록 만들어 줘"

그런데 막힌다.

클로드 코드는 내 컴퓨터 안의 글과 코드를 다룬다.

방금 찍은 사진을 실시간으로 눈으로 보고 재료를 골라내는 일은, 그 일에 특화된 바깥 서비스가 훨씬 잘한다.

마치 글은 내가 잘 쓰지만, 사진 속 물건을 알아보는 건 따로 눈 좋은 친구에게 맡기는 게 나은 것과 같다.

눈 좋은 친구를 빌려 오는 통로가 바로 API다.

API를 쓰면, 내 앱이 구글의 이미지 인식 같은 바깥 기능을 내 기능처럼 갖다 쓸 수 있다.

그래서 이 장은 "내 앱에 바깥 세상을 연결하는 법"을 배운다.


이 장에서 딱 4가지만

이 장에서 딱 4가지만

  1. API — 내 앱이 바깥 서비스에게 일을 부탁하는 창구다. 웨이터라고 생각하면 된다.
  2. API 키 — 그 창구를 여는 나만의 비밀번호다. 절대 남에게 보이면 안 된다.
  3. 모델 고르기 — 일에 맞는 AI를 고른다. 사진을 잘 보는 AI, 글을 잘 쓰는 AI가 따로 있다.
  4. PRD로 단계 쪼개기 — 냉장고 앱을 한 번에 안 만든다. 사진 인식 → 레시피 → 저장, 세 토막으로 나눠 시킨다.

개념 1 — API는 바깥 기능을 빌려 오는 창구

막히는 장면

"이미지 인식, 번역, 날씨 정보… 이런 걸 내가 다 만들어야 하나?" 싶어 막막한 적 있죠?

다 만들 필요 없다.

남이 이미 잘 만들어 둔 기능을, 정해진 창구로 빌려 쓰면 된다.

그 창구가 API다.

일상비유

식당에 가면 주방에 직접 들어가지 않는다.

웨이터에게 "스테이크 미디엄으로요" 하고 부탁한다.

웨이터가 주방에 전하고, 다 된 음식을 가져다준다.

내 앱(손님)이 바깥 서비스(주방)에 직접 못 들어가니, API(웨이터)에게 부탁하는 것이다.

비유 코드 위험
웨이터에게 "스테이크요" api.ask("이 재료로 요리 추천해 줘") 부탁을 모호하게 하면 엉뚱한 게 옴
주방에 직접 못 들어감 바깥 서비스 내부는 내가 못 만짐 창구(API)가 닫히면 그 기능을 못 씀

한 문장 정의 — API는 내 앱이 바깥 서비스에게 정해진 방식으로 일을 부탁하고 결과를 받는 창구다.

예시 폭격

예 1 — 완성 예(눈으로만 보기).

# 내 앱이 바깥 날씨 서비스에게 부탁하는 한 줄
# "서울 날씨 알려 줘" → "맑음, 23도"가 돌아온다
weather = api.ask("서울 오늘 날씨")
print(weather)   # 맑음, 23도

예 2 — 부분 완성(빈칸 채우기). 냉장고 앱이라면 무엇을 부탁할까?

# 빈칸: 내 앱이 AI에게 부탁할 말을 적어 보자
# (정답 예시는 아래 줄에)
food = api.ask("___________")
# → 예: "이 사진에 있는 재료를 목록으로 알려 줘"

예 3 — 잘못된 예 vs 올바른 예(before/after).

# before — 부탁이 모호하다
api.ask("뭔가 해 줘")          # AI가 뭘 할지 모름

# after — 부탁이 또렷하다
api.ask("재료로 만들 요리 3개 추천해 줘")  # 원하는 결과가 옴

이럴 때 이렇게 — 만들고 싶은 기능이 "이미 세상에 있을 법한 것"(번역·이미지 인식·지도)이면, 직접 만들지 말고 "이거 API 있어?"부터 물어본다.


개념 2 — API 키는 나만의 비밀번호

막히는 장면

"창구가 그냥 열려 있으면 아무나 막 쓰겠네? 비용은 누가 내?" 하고 걱정한 적 있죠?

그래서 창구마다 비밀번호가 걸려 있다.

그 비밀번호가 API 키다. 내 키로 들어가면 그 사용량이 내 앞으로 기록된다.

일상비유

헬스장 회원 카드와 같다.

카드를 찍어야 문이 열리고, 들어간 기록이 내 이름으로 남는다.

카드를 남에게 빌려주면, 남이 내 이름으로 운동하고 내가 회비를 문다.

비유 코드 위험
내 회원 카드로 입장 key = "내_비밀_키" 카드 잃으면 남이 내 이름으로 씀
카드를 남에게 안 빌려줌 키를 코드에 박지 않고 따로 보관 코드에 박아 올리면 누구나 내 키를 봄

한 문장 정의 — API 키는 내가 그 창구를 쓸 수 있게 해 주는 나만의 비밀번호이며, 사용 기록과 비용이 이 키를 따라 나에게 붙는다.

예시 폭격

예 1 — 완성 예(키 발급 순서, 눈으로만).

# Google AI Studio에서 키 받는 흐름 (글로 옮긴 것)
# 1) aistudio.google.com 접속
# 2) [Get API key] 누르기
# 3) [Create API key]로 키 생성
# 4) 생긴 키를 안전한 곳에 복사 (다시 못 보는 경우 많음)

예 2 — 잘못된 예 vs 올바른 예(before/after).

# before — 키를 코드에 그대로 박아 인터넷에 올림 (위험!)
key = "AIzaSy_진짜_내_키_1234"   # 깃허브에 올라가면 누구나 봄

# after — 키를 코드 밖 비밀 자리에 두고 불러옴
key = 비밀상자에서_꺼내기("MY_API_KEY")  # 코드엔 키가 안 보임

예 3 — 부분 완성(빈칸). 키가 새면 가장 먼저 할 일은?

# 빈칸: 키가 유출됐을 때 해야 할 일
# (정답 예시는 아래 줄에)
# 1) ______________
# → 예: 그 키를 즉시 폐기(삭제)하고 새 키를 다시 발급

이럴 때 이렇게 — 키는 비밀번호다. 화면 공유·블로그·깃허브에 키가 보이는 코드를 올리지 않는다. 실수로 올렸다면, 그 키를 바로 폐기하고 새로 만든다.


개념 3 — 일에 맞는 AI 모델 고르기

막히는 장면

"AI면 다 똑같은 거 아냐? 아무거나 쓰면 안 되나?" 싶은 적 있죠?

AI마다 잘하는 일이 다르다.

사진을 잘 보는 AI, 글을 잘 쓰는 AI, 코드를 잘 짜는 AI가 따로 있다.

일에 맞는 AI를 고르는 게 첫 단추다.

일상비유

병원에 가도 가 나뉘어 있다.

눈이 아프면 안과, 이가 아프면 치과로 간다.

내과 의사에게 충치를 보여 줘도 잘 못 고친다.

AI도 마찬가지로, 일에 맞는 곳을 찾아가야 한다.

비유 코드 위험
눈은 안과로 사진 인식엔 사진 잘 보는 모델 아무 모델이나 쓰면 결과가 부실
이는 치과로 코드 짜기엔 코드 특화 모델 비싼 모델을 쉬운 일에 쓰면 돈 낭비

한 문장 정의 — AI 모델은 저마다 강점이 달라, 하려는 일(사진 인식·글쓰기·코드 등)에 맞는 모델을 골라 연결한다.

세 가지 대표 모델을 표로 본다.

모델(만든 곳) 잘하는 일 이럴 때 고른다
GPT(OpenAI) 두루두루 잘함, 종류 많음 평범한 글쓰기·대화
Gemini(Google) 사진·이미지 보기가 강함 냉장고 사진처럼 그림을 다룰 때
Claude(Anthropic) 코드 짜기·꼼꼼함 프로그램 코드를 만들 때

예시 폭격

예 1 — 완성 예. 냉장고 앱은 사진을 본다. 그래서 Gemini를 고른다.

# 사진을 봐야 하니 사진 잘 보는 모델을 고른다
model = "Gemini"   # 멀티모달(그림+글) 강점

예 2 — 잘못된 예 vs 올바른 예(before/after).

# before — 일과 안 맞는 모델
# 냉장고 '사진'을 보여 줘야 하는데 글만 받는 모델 선택 → 사진을 못 봄

# after — 일과 맞는 모델
# 그림을 알아보는 멀티모달 모델 선택 → 사진 속 재료를 읽어 냄

예 3 — 부분 완성(빈칸). 코드를 짜 달라고 할 땐 어느 모델이 어울릴까?

# 빈칸: 코드 작성에 어울리는 모델
# (정답 예시는 아래 줄에)
model = "______"
# → 예: Claude (코드 특화·꼼꼼함)

이럴 때 이렇게 — "내 일이 그림 보기냐, 글쓰기냐, 코드 짜기냐"를 먼저 정한다. 그다음 그 일을 잘하는 모델로 연결한다.


개념 4 — PRD로 단계 쪼개 앱 만들기

막히는 장면

"냉장고 앱 통째로 만들어 줘"라고 한 번에 시켰더니, 어디가 어딘지 뒤죽박죽 된 적 있죠?

큰 앱을 한 덩어리로 시키면 확인도 수정도 어렵다.

(이건 0장 척추 3 "한 번에 말고, 단계로 쪼개기"와 같은 이야기다.)

먼저 무엇을 만들지 한 장으로 정리(PRD)하고, 작은 단계로 쪼개 하나씩 시킨다.

일상비유

요리도 레시피(PRD)를 먼저 본다.

"① 재료 손질 → ② 볶기 → ③ 담기" 순서를 정해 두고, 한 단계씩 한다.

순서를 안 정하고 한꺼번에 하면 태우거나 빠뜨린다.

비유 코드 위험
레시피 순서대로 한 단계씩 build("사진 인식")build("레시피") 단계마다 확인 — 실수 줄어듦
순서 없이 한꺼번에 build("앱 전부 한 번에") 뒤섞여 어디를 고칠지 모름

한 문장 정의 — PRD는 무엇을 왜 만들지 적은 한 장짜리 기획서이며, 그걸 작은 단계로 쪼개 하나씩 시키면 앱을 안전하게 완성한다.

냉장고 앱의 PRD는 세 단계로 쪼갠다.

단계 부탁하는 말(프롬프트) 결과
1단계 사진 인식 "냉장고 사진의 재료를 목록으로 알려 줘" 당근·계란·우유·파
2단계 레시피 추천 "이 재료로 만들 요리를 추천해 줘" 당근 계란볶음·파전
3단계 저장 "마음에 든 레시피를 저장하게 해 줘" 즐겨찾기 보관

예시 폭격

예 1 — 완성 예(1단계). 사진을 보내고 재료를 받는다.

# 1단계: 사진 → 재료 목록
재료 = api.ask(image="냉장고.jpg", 부탁="재료를 목록으로 알려 줘")
print(재료)   # ["당근", "계란", "우유", "파"]

예 2 — 부분 완성(빈칸, 2단계). 받은 재료로 무엇을 부탁할까?

# 2단계: 재료 → 레시피 (빈칸을 채워 보자)
레시피 = api.ask(부탁="___________", 재료=재료)
# → 예: "이 재료로 만들 수 있는 요리 3개 추천해 줘"

예 3 — 독립 적용(3단계). 마음에 든 레시피를 내 컴퓨터에 기억시키는 단계다.

# 3단계: 고른 레시피를 저장 (다음에 또 보기 위해)
# localStorage = 브라우저에 작게 적어 두는 메모지
저장("즐겨찾기", "당근 계란볶음")
# 앱을 껐다 켜도 그대로 남아 있다

이럴 때 이렇게 — 앱을 만들 땐, 먼저 "어떤 기능들이 필요하지?"를 번호 매긴 목록으로 적는다. 그게 PRD다. 그다음 1번부터 하나씩 시키고, 잘 되는지 보고, 다음으로 넘어간다.


완성된 냉장고 앱 한눈에 보기

세 단계를 다 잇고 나면, 이런 앱이 된다.

[ 냉장고를 부탁해 ]

[ 냉장고 사진 올리기 ]   ← 1단계 입력

인식된 재료:
당근  계란  우유  파      ← 1단계 결과 (멀티모달 API)

추천 레시피:
1. 당근 계란볶음 (15분)   ← 2단계 결과 (글쓰기 API)
2. 파전 (20분)
3. 우유 스크램블 (10분)

[ 저장 ]  [ 다른 레시피 ]   ← 3단계 (저장)

흐름을 한 줄로 요약하면 이렇다.

# 사진 → (멀티모달) 재료 → (글쓰기) 레시피 → (저장) 즐겨찾기
재료   = api.ask(image="냉장고.jpg")     # 1단계
레시피 = api.ask(부탁="요리 추천", 재료=재료)  # 2단계
저장("즐겨찾기", 레시피[0])              # 3단계

단순 규칙 (지금은 이 4개만)

지금은 다음 4개만 들고 가면 된다.

  1. 바깥 기능이 필요하면 → "이거 API 있어?"부터 묻는다.
  2. API 키는 비밀번호다 → 코드에 박거나 인터넷에 올리지 않는다.
  3. 일에 맞는 모델을 고른다 → 사진은 사진 잘 보는 모델, 코드는 코드 잘 짜는 모델.
  4. 한 번에 안 만든다 → PRD로 단계를 쪼개 하나씩 시키고 확인한다.

한 걸음 더 ▸ (지금 몰라도 됨)

"API를 쓰면 돈이 나가나?"가 궁금할 수 있다.

키로 들어간 만큼 사용료가 붙는 서비스가 많다. 처음엔 대개 무료 한도가 있으니, 연습 단계에선 거의 부담이 없다.

지금은 "키 = 비밀번호 = 내 앞으로 기록"만 기억하면 충분하다. 비용 관리는 익숙해진 뒤 천천히 챙기면 된다.


정리

이 장의 핵심 3줄.

API는 내 앱이 바깥의 똑똑한 기능을 빌려 오는 창구다(웨이터).

그 창구를 여는 비밀번호가 API 키이고, 일에 맞는 모델을 골라 연결한다.

큰 앱은 PRD로 적고 단계를 쪼개, 사진 인식 → 레시피 → 저장 순으로 하나씩 시켜 완성한다.

다음 장 예고 — 한 명의 AI 대신 여러 AI에게 역할을 나눠 맡기는 법을 본다. (지금 몰라도 됩니다 — 다음 장에서 천천히 풀려요.)

난이도
에피소드
질문
카드를 로딩 중...
답변

클릭하거나 Space를 눌러 뒤집기

0 / 0
학습 진도 0%
이동   Space 뒤집기   R 셔플